S2ST(Speech-to-Speech Translation)是語音轉語音的模型,語言可以選擇,不管是輸入及輸出都可以選擇語言,所涵蓋的語言代號請參考連結:SeamlessM4T語言別代號。本篇使用SeamlessM4T的S2ST功能,看看使用流程是否容易上手,以及翻譯結果的準確性。
安裝SeamlessM4T請參考文章SeamlessM4T安裝及使用環境建置
先導入模型,本次推出的SeamlessM4T有兩種型號:seamlessM4T_large與seamlessM4T_large。以large版本為例,執行以下程式碼後即已備好模型:
import torch
from seamless_communication.models.inference import Translator
**translator = Translator(
"seamlessM4T_large",
"vocoder_36langs",
torch.device("cuda:0"),
torch.float16,
)
此步驟的用意為在GPU上初始化一個轉譯器,選用模型"seamlessM4T_large",以及聲碼器"vocoder_36langs",官方建議選擇半精度浮點數(float16)可能是因為要節省記憶體,但可能因此影響翻譯精準度。
語音輸入需為音檔格式,而音檔格式取樣率限定為16kHz,若音檔取樣率不是16kHz,MetaAI提供以下程式碼轉換供使用者轉換自己的音檔取樣率:
import torchaudio
resample_rate = 16000
waveform, sample_rate = torchaudio.load(<path_to_input_audio>)
resampler = torchaudio.transforms.Resample(sample_rate, resample_rate, dtype=waveform.dtype)
resampled_waveform = resampler(waveform)
torchaudio.save(<path_to_resampled_audio>, resampled_waveform, resample_rate)
我使用的音檔為英文語音 ”The government can't afford to wobble on this issue.”播放
將此音檔丟入translator中,設定模型為”s2st”,目標語言為中文(官方公布的代碼為cmn)
translated_text, wav, sr = translator.predict(
".input_s2st.wav",
"s2st",
tgt_lang="cmn"
)
print(translated_text) #政府不能在这个问题上摇摆不定 ⁇
不知為何他轉譯的中文後面有兩個問號,輸出結果的語音為 播放
若想將輸出結果儲存為wav檔,執行程式碼如下:
import torchaudio
torchaudio.save("output_s2st.wav", wav[0].cpu(), sample_rate=sr)
若想在Conda環境播放該輸出結果,執行程式碼如下:
from IPython.display import Audio
Audio(wav[0].cpu(), rate=sr)
利用SeamlessM4T的S2ST功能(Speech-to-Speech Translation),將輸入之語音檔匯入預備好的轉譯器(Translator),選擇任務s2st,設定目標語言即可做轉譯,並產生目標語言的音檔。本篇使用英語語音轉中文語音,內容算是正確,但是中文語音聽起來有機械感,也非台灣口音。